package com.xci.sys.service;

import com.github.pagehelper.Page;
import com.xci.core.base.RestMessage;
import com.xci.core.annotation.Log;
import com.xci.core.annotation.Valid;
import com.xci.core.base.BaseService;
import com.xci.core.internal.Const;
import com.xci.sys.dao.FileDao;
import com.xci.sys.entity.SysFile;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * 文件服务
 */
@Service
public class FileService extends BaseService {
    @Resource
    private FileDao fileDao;//文件数据层对象

    /**
     * 新建文件
     * @param entity 文件对象
     */
    @Log(module = Const.Module.File, msg = "新建文件")
    @Transactional(rollbackFor = Exception.class)
    public RestMessage insert(@Valid SysFile entity) {
        fileDao.insert(entity);
        return RestMessage.success();
    }

    /**
     * 删除关联文件
     * @param id 关联文件主键
     * @return 返回影响的行数
     */
    @Transactional(rollbackFor = Exception.class)
    @Log(module = Const.Module.File, msg = "删除文件")
    public RestMessage delete(@NotNull(message = "请指定文件主键") String id) {
        fileDao.delete(id);
        return RestMessage.success();
    }

    /**
     * 根据记录主键删除关联文件
     * @param recordId 记录主键
     * @return 返回影响的行数
     */
    @Transactional(rollbackFor = Exception.class)
    @Log(module = Const.Module.File, msg = "删除文件")
    public RestMessage deleteByRecordId(@NotBlank(message = "请指定记录主键") String recordId) {
        fileDao.deleteByRecordId(recordId);
        return RestMessage.success();
    }

    /**
     * 检查记录主键是否存在
     * @param recordId 记录主键
     * @return 如果存在返回true, 否则返回false
     */
    public Boolean existByRecordId(@NotBlank(message = "请指定记录主键") String recordId){
        return fileDao.existByRecordId(recordId);
    }

    /**
     * 根据主键获取单个关联文件对象
     * @param id 关联文件主键
     * @return 返回关联文件对象
     */
    public SysFile selectById(@NotBlank(message = "请指定文件主键") String id) {
        return fileDao.selectById(id);
    }

    /**
     * 根据记录主键获取第一个关联文件对象
     * @param recordId 记录主键
     * @return 返回关联文件对象
     */
    public SysFile selectByRecordId(@NotBlank(message = "请指定记录主键") String recordId) {
        return fileDao.selectByRecordId(recordId);
    }

    /**
     * 查询关联文件列表
     * @return 返回关联文件对象列表
     */
    public List<SysFile> selectList() {
        return fileDao.selectList();
    }

    /**
     * 查询关联文件分页列表
     * @return 返回关联文件对象分页列表
     */
    public Page<SysFile> selectPageList() {
        return fileDao.selectPageList();
    }

    /**
     * 根据记录主键获取关联文件对象列表
     * @param recordId 记录主键
     * @return 返回关联文件对象列表
     */
    public List<SysFile> selectListByRecordId(@NotBlank(message = "请指定记录主键") String recordId) {
        return fileDao.selectListByRecordId(recordId);
    }

    /**
     * 根据记录主键获取关联文件对象分页列表
     * @param recordId 记录主键
     * @return 返回关联文件对象分页列表
     */
    public Page<SysFile> selectPageListByRecordId(@NotBlank(message = "请指定记录主键") String recordId) {
        return fileDao.selectPageListByRecordId(recordId);
    }
}